package CodeTwo;

import java.util.ArrayList;
import java.util.Collections;

/**
 * 首先2个数的乘积是4位数(大于等于1000,小于10000),一个数确定时,另一个数范围随之确定 随后不能有两个数为0，千位不是0，所以说后两位不能是0 最后四位数减去前两位和后两位可以被9整
 * 前面两个条件没问题，主要是最后条件很奇怪： 假设a,b,c,d分别代表千位数、百位数、十位数、个位数，x,y分别代表两个两位数，那么a*1000+b*100+c*10+d=四位数
 * 10x+y=四位数，x=10*a+b，y=10*c+d，四位数-x-y=990a+99b+9c=9*(110a+11b+c) 所以说四位数减两个两位数的结果肯定可以被9整除
 *
 * @author ASUS
 */
public class CarlosRivera {
  public static void main(String[] args) {
    ArrayList<Integer> results = new ArrayList<>();
    int[] startDigit = new int[4];
    int[] productDigit = new int[4];
    int start = 10, end = 99, size = 4;
    int target;
    for (int i = start; i <= end; i++) {
      for (int j = i; j <= end; j++) {
        target = i * j;
        if (target % 100 == 0 || (target - i - j) % 9 != 0) {
          continue;
        }
        startDigit[0] = i / 10;
        startDigit[1] = i % 10;
        startDigit[2] = j / 10;
        startDigit[3] = j % 10;
        productDigit[0] = target / 1000;
        productDigit[1] = (target % 1000) / 100;
        productDigit[2] = target % 1000 % 100 / 10;
        productDigit[3] = target % 10;
        int count = 0;
        for (int x = 0; x < size; x++) {
          for (int y = 0; y < size; y++) {
            if (productDigit[x] == startDigit[y]) {
              count++;
              productDigit[x] = -1;
              startDigit[y] = -2;
              if (count == 4) {
                /*System.out.println(target + " = " + i + " * " + j);*/
                results.add(target);
              }
            }
          }
        }
      }
    }
    Collections.sort(results);
    for (int temp : results) {
      System.out.printf("%d ", temp);
    }
  }
}
